#include <iostream>
#include "../kisebo/Livro.h"
#include "../kisebo/Usuario.h"
#include "../kisebo/Interesse.h"
#include "../kisebo/Controlador.h"

using namespace std;

int main2(int argc, char **argv)
{
        Controlador *Sistema = new Controlador();
        Usuario u1, *u2;
        vector<Livro> result;
        Interesse interesse;
        vector<Interesse> interesses_antes;
        vector<Livro> livros_antes;
        vector<Interesse> interesses_depois;
        vector<Livro> livros_depois;
        int tipo = 2; //autor
        string valor = "Sun, Tzu";

        u1 = Sistema->CheckLogin("Fabiano", "123");
        u2 = Sistema->GetUsuario();
        if(u1.GetID() == u2->GetID()) {
        	cout << "Usuario OK" << endl;
        }
        else {
        	cout << "Teste falhou" << endl;
        	return(1);
        }

        interesses_antes = Sistema->GetUsuario()->GetInteresses();

       	if (interesses_antes.size() > 0) {
       		cout << endl << "Interesses antes: " << endl;

       		for(unsigned int i=0; i<interesses_antes.size(); i++) {
       			switch(interesses_antes.at(i).GetTipo()) {
       			case 1:
       				cout << endl << "\t> Tema: ";
       				break;
       			case 2:
       				cout << endl << "\t> Autor: ";
       				break;
       			case 3:
      				cout << endl << "\t> Titulo: ";
       				break;
       			default:
      				cout << endl << "\t> Indefinido: ";
       			}
       			cout << interesses_antes.at(i).GetValor();
       		}
        		cout << endl;
       	}

       	livros_antes = Sistema->GetUsuario()->GetLivrosDeInteresses();

       	if (livros_antes.size() > 0) {
       		cout << endl << "Livros de interesses antes: " << endl;

       		for(unsigned int i=0; i<livros_antes.size(); i++) {
       			cout << endl << "\t> " << livros_antes.at(i).GetTitulo();
       		}

       		cout << endl;
       	}

       	Sistema->MontaPesquisa(tipo);
        result = Sistema->PesquisaInteresses(valor);

        if (result.size() == 1) {
        	cout << "Quantidade do resultado de livros OK" << endl;
        }
        else {
        	cout << "Teste falhou" << endl;
        	return(1);
        }

        interesse.SetTipo(tipo);
        interesse.SetValor(valor);

        for(unsigned int i=0; i<result.size(); i++) {
        	if (result.at(0).GetTitulo().compare(valor) == 0) {
        		cout << "Titulo do livro OK" << endl;
        	}
        	u2->AdicionaLivroDeInteresse(result.at(0));
        }

        u2->AdicionaInteresse(interesse);
        u2->GravaInteresses();
        u2->GravaLivrosDeInteresses();

        interesses_depois = Sistema->GetUsuario()->GetInteresses();

       	if (interesses_depois.size() > 0) {
       		cout << endl << "Interesses depois: " << endl;

       		for(unsigned int i=0; i<interesses_depois.size(); i++) {
       			switch(interesses_depois.at(i).GetTipo()) {
       			case 1:
       				cout << endl << "\t> Tema: ";
       				break;
       			case 2:
       				cout << endl << "\t> Autor: ";
       				break;
       			case 3:
      				cout << endl << "\t> Titulo: ";
       				break;
       			default:
      				cout << endl << "\t> Indefinido: ";
       			}
       			cout << interesses_depois.at(i).GetValor();
       		}
        		cout << endl;
       	}

       	livros_depois = Sistema->GetUsuario()->GetLivrosDeInteresses();

       	if (livros_depois.size() > 0) {
       		cout << endl << "Livros de interesses depois: " << endl;

       		for(unsigned int i=0; i<livros_depois.size(); i++) {
       			cout << endl << "\t> " << livros_depois.at(i).GetTitulo();
       		}

       		cout << endl;
       	}

        return 0;
}
